package com.server.utils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.server.model.OsaUserInfo;

public class UserSessionMapUtils {
	
	/**
	 * 用户信息
	 */
	private static Map<String, OsaUserInfo> sessionMap = new HashMap<String, OsaUserInfo>();
	/**
	 * 用户openID关联sessionCode
	 */
	private static Map<String, String> openSessionMap = new HashMap<String, String>();

	/**
	 * 存放用户信息，设置sessionCode过期时间，30分钟
	 * @param sessionCode
	 * @param osaUserInfo
	 * @return
	 */
	public static void putUser(String sessionCode, OsaUserInfo osaUserInfo) {
		Long now = new Date().getTime();
		osaUserInfo.setSessionTimeOut(now + 1800 * 1000); // sessionCode过期时间，30分钟
		sessionMap.put(sessionCode, osaUserInfo);
		openSessionMap.put(osaUserInfo.getOpenId(), sessionCode);
	}
	
	/**
	 * 根据sessionCode获取用户信息，若用户信息过期或者用户不存在，返回null
	 * @param sessionCode
	 * @return
	 */
	public static OsaUserInfo getUserInfo(String sessionCode) {
		OsaUserInfo osaUserInfo = sessionMap.get(sessionCode);
		if (osaUserInfo != null) {
			Long now = new Date().getTime();
			if (now < osaUserInfo.getSessionTimeOut()) { // 判断用户是否过期
				return osaUserInfo;
			} else {
				sessionMap.remove(sessionCode);
			}
		}
		return null;
	}
	
	/**
	 * 删除openID关联的sessionCode用户信息
	 * @param openId
	 */
	public static void deleteUserInfo(String openId) {
		String sessionCode = openSessionMap.get(openId);
		if (sessionCode != null) {
			sessionMap.remove(sessionCode);
		}
	}
	
	/**
	 * 获取用户信息，不论是否过期
	 * @param sessionCode
	 * @return
	 */
	public static OsaUserInfo getUser(String sessionCode) {
		return sessionMap.get(sessionCode);
	}
	
}
